package cn.xiaomubiao.oschine.base;

import android.view.View;
import android.widget.FrameLayout;

import java.util.List;

import cn.xiaomubiao.oschine.R;
import cn.xiaomubiao.oschine.util.UIUtils;


/**
 * 每一个大模块中viewPager中的Fragment公共加载流程类
 *
 * @author 张伟斌
 */

public abstract class CommonPager {

    // 提供几个标识变量,控制要显示哪一个的界面
    public boolean isNullData = false; //是否是空数据
    public boolean isLoadSuccess = false; //是否加载成功并且有数据

    public FrameLayout mRootView;// 通用布局

    public View mLoadingView; // 正在加载的布局
    public View mErrorView; // 加载失败的布局
    public View mEmptyView; // 空数据的布局
    public View mNoLogin; // 未登陆的布局

    // 构造方法 将通用的一个布局转化为view对象
    public CommonPager() {
        mRootView = (FrameLayout) View.inflate(UIUtils.getContext(), R.layout.pager_common, null);
        System.out.println(mRootView.toString());
    }

    /*
     * 具体成功加载到数据之后的操作
     * 由子类实现
     */

    public abstract View loadSuccess();

    /*
     * 具体如何加载数据
     * 由子类实现
     */
    public abstract void loadData();

    /*
     * 公共界面的3个加载方法 ---------------------------------------↓↓
     */
    // 进度条界面
    public void loading() {
        // 判断是否正在加载
        if (mLoadingView == null) {
            mLoadingView = View.inflate(UIUtils.getContext(), R.layout.pager_loading, null);

        }
        changeView(mLoadingView);

    }

    // 加载失败界面
    public void loadFailed() {
        // 判断是否正在加载
        if (mEmptyView == null) {
            mEmptyView = View.inflate(UIUtils.getContext(), R.layout.pager_error, null);

        }
        changeView(mEmptyView);

    }

    // 空数据界面
    public void dataNull() {
        // 判断是否正在加载
        if (mErrorView == null) {
            mErrorView = View.inflate(UIUtils.getContext(), R.layout.pager_empty, null);

        }
        changeView(mErrorView);

    }

    // 改变界面的方法
    public void changeView(View newView) {

        // 移除rootView之前的view
        mRootView.removeAllViews();
        // 添加新的view
        mRootView.addView(newView);

    }

    // ----------------------------------------------------↑↑

    /*
     * 根据boolean变量的值 调用显示不同的界面显示 有数据/空数据
     */
    public void changeViewOnUiThread() {

        // 通过handler对象,调用post方法
        cn.xiaomubiao.oschine.MyApplication.mHandler.post(new Runnable() {
            @Override
            public void run() {
                // 首先判断是否成功加载到了数据
                if (isLoadSuccess) {
                    //是
                    View view = loadSuccess();
                    changeView(view);

                } else {
                    // 失败,则接着判断是网络请求失败还是数据为空
                    if (isNullData) {
                        // 空数据
                        dataNull();

                    }

                }

            }
        });

    }

    /*
     * 根据子类传过来的加载数据的情况来控制boolean变量,
     * 然后根据boolean变量显示有数据/无数据界面
     */
    public void showSuccessPager(Object obj) {
        // 判断是否为空
        if (obj != null) {
            //不为空  再判断传过来的数据时集合还是普通对象
            if (obj instanceof List) {
                // 是集合
                List list = (List) obj;
                // 判断集合是否有数据
                if (list.size() > 0) {
                    // 有数据
                    isLoadSuccess = true;
                } else {
                    // 空数据
                    isNullData = true;
                }
            } else {
                //是普通对象
                isLoadSuccess = true;
            }
        }
        // 修改完变量值,开始调用流程,显示界面
        changeViewOnUiThread();
    }

    // 加载失败时显示的界面
    // 供子类在请求失败时可直接调用
    public void showFailPager() {

        cn.xiaomubiao.oschine.MyApplication.mHandler.post(new Runnable() {
            @Override
            public void run() {
                loadFailed();
            }
        });
    }



    // 加载未登录时显示的界面
    // 供子类在请求失败时可直接调用
    public void showNoLogin() {

        cn.xiaomubiao.oschine.MyApplication.mHandler.post(new Runnable() {
            @Override
            public void run() {
                noLogin();
            }
        });
    }

    public void noLogin() {
        if (mNoLogin == null) {
            mNoLogin = View.inflate(UIUtils.getContext(), R.layout.pager_nologin, null);
        }
        changeView(mNoLogin);
    }
}
